Cara te admiro, mesmo sabendo que não tem muitas pessoas no fórum para aproveitar esse conteúdo você continua fazendo e com qualidade, meus parabéns carinha eu mesmo pensei em fazer aulas de lógica da programação, algoritmo e c/c++ de acordo com os métodos que estou aprendendo na faculdade, porém não tenho essa paciência que você tem, mesmo eu não estando utilizando essas aulas não deixei de notar a qualidade do seu trabalho, então deixo aqui meu obrigado por mesmo nos dias de hoje continuar ajudando a comunidade.
- Fórum
- OTServ
- Recursos
- Linguagens de Programação
- Aulas
- #4 - aula de scripting lua - estrutura de controle - IF
#4 - aula de scripting lua - estrutura de controle - IF
Por Poccnn, 10 de abr. de 2017 em Aulas
info
Grupo: Conde
Registrado: 13/10/13
Posts: 504
Reputação: +95
Gênero: Masculino

Editado Abril 19 por Jakson Souza
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

@Jakson Souza: Obrigado companheiro por seu apoio.
Quiçá nós não faremos um pacto para criar estudos de c/c++.
passar bem.
if getPlayerLevel(cid) == 20 then
doPlayerSendTextMessage(cid, 24,Você tem nível 20")
elseif getPlayerLevel(cid) >= 21 then
doPlayerSendTextMessage(cid, 24,Você tem nível maior que 20")
end
return true
end
Editado Abril 20 por Nildson
Marcando, que próxima semana irei começar a estudar.
if getPlayerLevel(cid) <= 100 then
print("Voçe passou do level 100")
return true
end
elseif getPlayerLevel(cid) == 200 then
print("Voçe precisa de level 200")
return true
end
espero q esteja certo
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

16 horas atrás, Nildson disse:if getPlayerLevel(cid) == 20 then
doPlayerSendTextMessage(cid, 24,Você tem nível 20")
elseif getPlayerLevel(cid) > 21 then
doPlayerSendTextMessage(cid, 24,Você tem nível maior que 20")
end
return true
end
Não sei como é o restante desse script, mas esse return true e esse end no final não fazem parte de nenhum bloco e o end não está fehando nenhum escopo, portanto geraria um erro de execução.
15 horas atrás, ZikaLord disse:if getPlayerLevel(cid) <= 100 then print("Voçe passou do level 100") return true end elseif getPlayerLevel(cid) == 200 then print("Voçe precisa de level 200") return true endespero q esteja certo
Totalmente errado.
Tu fechou o if e após ter fechado quis abrir um elseif.
O elseif está intimamente ligado ao if, portanto não pode ser declarado sozinho.
Outra coisa: a mensagem que tu pos nos dois blocos criados tanto por if quanto por elseif não condizem com a declaração da condição poata nos mesmo.
Sugiro que reveja a condição declarada ou a mensagem enviada e, caso seja preciso, re-leia essa aula:
Editado Abril 20 por Poccnn
if getPlayerLevel(cid) < 20 then
doPlayerSendTextMessage(cid, 25,"Você tem nível menor que 20")
elseif getPlayerLevel(cid) == 20 then
doPlayerSendTextMessage(cid, 25,"Você tem nível 20")
else
doPlayerSendTextMessage(cid, 25,"Você tem nível maior que 20")
end
E agora ta certo ?
Editado Abril 20 por Nildson
info
Grupo: Visconde
Registrado: 21/05/13
Posts: 303
Reputação: +25

if not isPremium(cid) or getPlayerLevel(cid) <= 49 then
doPlayerSendTextMessage(cid,22,"Este item só pode ser usado por jogadores VIP lvl 50+")
return false
end --- nao sei se é pra fazer com print ou sendText então fiz com sendText
--------------------------------------------------------------------------------------------------ou----------------------------------------------------------------------------------------------------
if getPlayerLevel (cid) < 50 then --- uma duvida esse espaço antes do (cid) interfere no script? eu sempre faço isso e como sei q faço isso sempre no final eu verifico
doPlayerSendTextMessage (cid, 22," você ainda não alcançou o nível 50 e nao tem direiro a nenhum premio ")
alseif getPlayerLevel(cid) >= 50 then
doPlayerSendTextMessage(cid, 22,"parabéns você ultrapassou o nível 50 e receberá um premio pela façanha")
doPlayerAddItem(cid,itemid,quantidade)
return true
end ---- eu sempre uso esses return true ou false talvez nem precise gostaria de uma dica a respeito de se precisa ou não.
acredito que no primeiro exemplo se faz necessário (ajuda no erro la rsrsrs)
outra duvida eu tb as vezes deixo minusculas algumas letras tipo doplayerAdditem(cid) essas letras minusculas gera erro? é obrigatório maiúsculo ou é apenas mais arrumado?
Editado Abril 20 por wevertonvrb
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

20 horas atrás, Nildson disse:if getPlayerLevel(cid) < 20 then
doPlayerSendTextMessage(cid, 25,"Você tem nível menor que 20")
elseif getPlayerLevel(cid) == 20 then
doPlayerSendTextMessage(cid, 25,"Você tem nível 20")
else
doPlayerSendTextMessage(cid, 25,"Você tem nível maior que 20")
end
E agora ta certo ?
Certíssimo. Faça agora com mais condições e mescle uma condição junto com outra condição usando and, or e not.
9 horas atrás, wevertonvrb disse:--- nao sei se é pra fazer com print ou sendText então fiz com sendText
O script é seu, tu faz como quiser.
9 horas atrás, wevertonvrb disse:-- uma duvida esse espaço antes do (cid) interfere no script? eu sempre faço isso e como sei q faço isso sempre no final eu verifico
Não tem problema algum. Na ora da execução do código a formatação é removida e fica apenas uma linha de execução desse código.
9 horas atrás, wevertonvrb disse:alseif getPlayerLevel(cid) >= 50 then
Cuidado com erro de digitação.
9 horas atrás, wevertonvrb disse:-- eu sempre uso esses return true ou false talvez nem precise gostaria de uma dica a respeito de se precisa ou não.
acredito que no primeiro exemplo se faz necessário (ajuda no erro la rsrsrs)
Isso é relativo a source da distro. Alguns requerem que seja retornado algum valor verdadeiro, outros não. Irei tratar melhor essa questão quando entrarmos nas aulas sobre tfs.
9 horas atrás, wevertonvrb disse:outra duvida eu tb as vezes deixo minusculas algumas letras tipo doplayerAdditem(cid) essas letras minusculas gera erro? é obrigatório maiúsculo ou é apenas mais arrumado?
Lua é sensível a letras minúsculas para maiúsculas; ou seja, ela diferencia maiúsculas de minúsculas.
Se existe uma função chamada isLua e tu chamar islua, ela não irá encontra-lo pois ele diferencia o "L" maiúsculo do "l" minúsculo.
if isPlayer(cid) then
if getPlayerLevel(cid) >= 1 and getPlayerLevel(cid) <= 100 then
doPlayerSendTextMessage(cid, 25,"Você tem nível entre um e cem")
elseif getPlayerLevel(cid) > 100 then
doPlayerSendTextMessage(cid, 25,"Seu nivel é maior que 101")
end
else
print("Nao é player")
end
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

2 horas atrás, rorix disse:if isPlayer(cid) then
if getPlayerLevel(cid) >= 1 and getPlayerLevel(cid) <= 100 then
doPlayerSendTextMessage(cid, 25,"Você tem nível entre um e cem")
elseif getPlayerLevel(cid) > 100 then
doPlayerSendTextMessage(cid, 25,"Seu nivel é maior que 101")
end
else
print("Nao é player")
end
Ficou certo as sentenças, única coisa que poderia mudar é a mensagem que diz que o player tem level maior que 101 o que pode não ser verdade; ele pode ter level 101 e cair no bloco do elseif.
Outra coisa é que tu poderia ter unido a condição de se é player junto com o outro if; mas ai depende muito do que tu queira fazer.
Já usou também as palavras or e not em condições?
if getPlayerLevel(cid) >= 2 and getPlayerLevel(cid) <= 20 then
doSendMagicEffect(getThingPos(cid), 40)
doPlayerSendTextMessage(cid, 25,"Parabéns você fez a quest iniciante do nivel 2 ao 20")
elseif getPlayerLevel(cid) == 21 or getPlayerLevel(cid) >= 22 then
doSendMagicEffect(getThingPos(cid), 41)
doPlayerSendTextMessage(cid, 25,"Você não pode fazer mais esta quest por estar nível superior ao 21")
else
doSendMagicEffect(getThingPos(cid), 39)
doPlayerSendTextMessage(cid, 25,"Você tem nível 0, upe até nível 1 e retorne aqui")
end
Bom, eu entendi sobre o exercício e adicionei o and e or que o senhor pediu, más tenho uma dúvida, sei que quando adiciona not, mesmo quando a função é correta ela se torna falsa, más quando fui adicionar um if not ela não funcionava no tíbia, em vez de por o if not coloquei o else que é praticamente quase a mesma coisa, obrigado pela suas aulas, eu estou aprendendo bastante do básico do script e quero que continue cada vez mais e me incentivo mais ainda quando tem aquela notificação de nova aula. ![]()
info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino

1 hora atrás, Nildson disse:más tenho uma dúvida, sei que quando adiciona not, mesmo quando a função é correta ela se torna falsa, más quando fui adicionar um if not ela não funcionava no tíbia, em vez de por o if not coloquei o else que é praticamente quase a mesma coisa
Como assim não funcionou no tíbia? E o que tem haver o tibia com o script?
O not é uma negação de uma condição e o else não requer condição alguma, portanto não são sequer parecidas.
Tu tentou por o not nesse script ai?
58 minutos atrás, Poccnn disse:
Como assim não funcionou no tíbia? E o que tem haver o tibia com o script?
O not é uma negação de uma condição e o else não requer condição alguma, portanto não são sequer parecidas.
Tu tentou por o not nesse script ai?
tudo bem, me desculpe se interpretei de maneira errada, mas, sim tentei adicionar ao script.
o script funciona só nas partes de elseif, más só não funciona na parte do if not.
if not getPlayerLevel(cid) == 1 then
doSendMagicEffect(getThingPos(cid), 39)
doPlayerSendTextMessage(cid, 25,"Você tem nível 0, upe até nível 1 e retorne aqui")
elseif getPlayerLevel(cid) >= 2 and getPlayerLevel(cid) <= 20 then
doSendMagicEffect(getThingPos(cid), 40)
doPlayerSendTextMessage(cid, 25,"Parabéns você fez a quest iniciante do nivel 2 ao 20")
elseif getPlayerLevel(cid) == 21 or getPlayerLevel(cid) >= 22 then
doSendMagicEffect(getThingPos(cid), 41)
doPlayerSendTextMessage(cid, 25,"Você não pode fazer mais esta quest por estar nível superior ao 21")
end
se tiver alguma coisa errada me explique por favor ...
Editado Abril 24 por Nildson







info
Grupo: Herói
Registrado: 07/03/16
Posts: 1.4k
Reputação: +385
Gênero: Masculino
Palavras e caracteres reservados
Link da aula anterior, caso não tenha lido.
Palavras reservadas que será usado nessa aula:
if, else, elseif, then, end, and, or, not
Estrutura de controle (if)
O if serve para criar uma condição; ele está precedido de outra palavra que finaliza a condição, que se chama “then”, e também de outra palavra para fechar o if, que se chama “end”.
Caso a condição seja verdadeira, o bloco criado por if será executado, caso não seja verdadeira, ele passa para a próxima instrução.
Exemplo:
if (condição) then -- caso a condição seja verdadeira, executa as instruções abaixo.
print(“condição verdadeira”)
return true
end -- finaliza o if.
E se precisarmos de mais condições? Podemos usar dentro do if a palavra “and” que diz ao sistema que há mais condições para ser analisadas.
if (condição) and (condição) then -- abertura do bloco.
print(“as duas condições são verdadeiras”) -- evento dentro do bloco criado por then.
end -- finaliza o if.
Podemos também usar a palavra “or” que diz ao sistema que caso uma condição não seja verdadeira, ele tem que verificar se a próxima condição é verdadeira.
if (condição) or (condição) then
-- abertura do bloco.
print(“uma, ou as duas condições é, são verdadeira\’s”) – evento dentro do bloco criado por then.
end -- finaliza o if.
O “elseif” faz a mesma coisa do “if”, ele cria uma nova condição e um novo bloco, e nela, podemos inserir instruções distintas para cada ocasião.
valordaconta = 100
if valordaconta > 100 then
print(“não temos essa quantia”)
elseif valordaconta <= 100 and valordaconta > 0 then
print(“pague a conta”)
elseif valordaconta <= 0 then
print(“conta não tem valor, portanto não precisa paga-la”)
end -- fecha o if. Não é necessário fechar os elseif’s, pois eles fazem parte do if.
Existe outra palavra reservada que ajuda muito quando determinamos diversas condições, mas não são validas; O “else” é a ultima possibilidade de se criar um bloco de instruções caso nenhuma condição anterior seja valida.
cor = “azul”
if cor == “vermelha” then
print(“sinal de pare”)
elseif cor == “amarela” then
print(“sinal de atenção”)
elseif cor == “verde” then
print(“sinal de liberado”)
else -- executa o bloco, desde que as demais condições acima não sejam validas.
print(“cor desconhecida”)
end
A palavra reservado “not” serve para inverte o valor da condição; caso a condição seja verdadeira, ao usar a palavra not, ela se torna falsa e assim vice-versa.
if not 1+1 ~= 2 then -- 1+1 não é diferente de 2, portanto é uma condição falsa.
print(“mesmo 1+1 não sendo diferente de 2, esse bloco foi executado porquê a palavra \“not\” inverteu o valor da condição de \“false\” para \”true\”.”)
end
Agora no código que vocês criaram nas aulas anteriores, acrescentem estruturas de controles com condições a eles.
Inté a próxima aula.
Editado Maio 5 por Poccnn